package cn.py.boot_lua;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.*;

public class LyricParser {
    public static void main(String[] args) {
        // 模拟输入数据（JSONArray）
        String jsonStr = "[" +
                "{\"word\":\"[Verse]\\n月\",\"success\":true,\"start_s\":13.80319,\"end_s\":14.20213,\"p_align\":1}," +
                "{\"word\":\"光\",\"success\":true,\"start_s\":14.20213,\"end_s\":14.28191,\"p_align\":1}," +
                "{\"word\":\"洒\",\"success\":true,\"start_s\":14.60106,\"end_s\":14.68085,\"p_align\":1}," +
                "{\"word\":\"满\",\"success\":true,\"start_s\":15,\"end_s\":15.07979,\"p_align\":1}," +
                "{\"word\":\"青\",\"success\":true,\"start_s\":15.47872,\"end_s\":15.55851,\"p_align\":1}," +
                "{\"word\":\"石\",\"success\":true,\"start_s\":15.87766,\"end_s\":15.95745,\"p_align\":1}," +
                "{\"word\":\"巷\",\"success\":true,\"start_s\":16.2766,\"end_s\":16.35638,\"p_align\":1}," +
                "{\"word\":\"\\n风\",\"success\":true,\"start_s\":17.15426,\"end_s\":17.31383,\"p_align\":1}" +
                "]";

        JSONArray data = JSONArray.parseArray(jsonStr);
        List<String> lines = new ArrayList<>();
        List<Double> startTimes = new ArrayList<>();
        List<Double> endTimes = new ArrayList<>();

        StringBuilder currentLine = new StringBuilder();
        Double currentLineStart = null; // 记录当前正在积累的行的开始时间
        Double currentLineEnd = null;   // 记录当前正在积累的行的结束时间

        for (int i = 0; i < data.size(); i++) {
            JSONObject obj = data.getJSONObject(i);
            String word = obj.getString("word");

            // 处理换行符：如果词中包含 '\n'，说明当前词是新行的开始，需要先提交上一行（如果存在）
            if (word.contains("\n")) {
                // 1. 提交上一行（如果 currentLine 不为空）
                if (currentLine.length() > 0) {
                    lines.add(currentLine.toString());
                    startTimes.add(currentLineStart);
                    endTimes.add(currentLineEnd); // 使用积累的结束时间
                    // 重置
                    currentLine.setLength(0);
                    currentLineStart = null;
                    currentLineEnd = null;
                }
                // 2. 开始积累新行
                // 从 '\n' 之后的字符开始，作为新行的第一个词
                int idx = word.lastIndexOf('\n');
                String remaining = word.substring(idx + 1);
                if (!remaining.isEmpty()) {
                    currentLine.append(remaining);
                    // 设置新行的开始时间
                    if (currentLineStart == null) {
                        currentLineStart = obj.getDouble("start_s");
                    }
                }
                // 更新新行的结束时间
                currentLineEnd = obj.getDouble("end_s");
            } else {
                // 不包含换行符，正常积累到当前行
                currentLine.append(word);
                // 设置开始时间（仅当是该行第一个词时）
                if (currentLineStart == null) {
                    currentLineStart = obj.getDouble("start_s");
                }
                // 更新结束时间（总是设置为当前词的结束时间）
                currentLineEnd = obj.getDouble("end_s");
            }
        }

        // 3. 循环结束后，提交最后一行（如果存在）
        if (currentLine.length() > 0) {
            lines.add(currentLine.toString());
            startTimes.add(currentLineStart);
            endTimes.add(currentLineEnd);
        }

        // 输出结果
        for (int i = 0; i < lines.size(); i++) {
            System.out.println("(开始时间:" + startTimes.get(i) + ", 结束时间: " + endTimes.get(i) + ", 词汇: " + lines.get(i) + ")");
        }
    }
}